import {ElDialog, ElPagination, ElTable, ElTableColumn} from "element-plus";
import {Column} from "./column";
import {HandlerItem} from "./handlerItem";
import {BasicScope} from "./basicScope";
import {SearchScope} from "./searchScope";
import {DialogScope} from "./dialogScope";

/**
 * 配置项，详见文档 [戳这里](http://flyss.top/static/element/#/help/crudDoc)
 * 泛型R：数据列对象类型
 */
export declare interface CrudConfig<R> {
    /**
     * @see Column
     * 列属性
     */
    columns: Array<Column<R>>;
    /**
     * 表格操作栏菜单
     */
    handlerList?: Array<HandlerItem<R>>;
    /**
     * 表单验证规则，详见[戳这里](https://element.eleme.cn/#/zh-CN/component/form)
     */
    rules?: object;
    /**
     * 表格作用域，用于定义[props/attrs]等属性
     */
    $table?: BasicScope<typeof ElTable>;
    /**
     * 弹出层作用域，用于定义[props/attrs]等属性
     */
    $dialog?: DialogScope<typeof ElDialog>;
    /**
     * 搜索栏作用域，用于定义[props/attrs]等属性
     */
    $search?: SearchScope<any>;
    /**
     * 表格操作作用域，用于定义[props/attrs]等属性
     */
    $handler?: BasicScope<typeof ElTableColumn>;
    /**
     * 表格操作作用域，用于定义[props/attrs]等属性
     */
    $page?: BasicScope<typeof ElPagination>;
    /**
     * 表格勾选栏作用域，用于定义[props/attrs]等属性
     */
    $selection?: BasicScope<typeof ElTableColumn>;
    /**
     * 是否显示新增按钮
     */
    addable?: boolean;
    /**
     * 是否显示分页
     */
    pageable?: boolean;
    /**
     * 表格是否可勾选
     */
    selectable?: boolean;
    /**
     * 是否显示探索栏
     */
    searchable?: boolean;
    /**
     * 探索栏是否折叠
     */
    collapsible?: boolean;
    /**
     * 是否显示重置按钮
     */
    showRest?: boolean;
    /**
     * 是否显示表格序号
     */
    showIndex?: boolean;
    /**
     * 是否显示表格列显隐切换按钮
     */
    showColumnToggle?: boolean;
    /**
     * 新增按钮权限
     */
    addPermission?: string;
    /**
     * 打开弹出层前触发，操作完成后调用done打开弹出层
     * @param row
     * @param done
     */
    beforeOpen?: (row: R, done: () => void) => void;
    /**
     * 关闭弹出层前触发，操作完成后调用done关闭弹出层
     * @param row
     * @param done
     */
    beforeClose?: (row: R, done: () => void) => void;

    [key: string]: any;
}
